home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
LOGIC Apps
/
Logic-APPLE_II_APPS.iso
/
pc
/
LOGIC Apple II 5.25" Library - DOS Part 7
/
DOS203A.dsk
/
DOWNLOAD.S
< prev
next >
Wrap
Text File
|
2012-02-16
|
9KB
|
306 lines
*/ SEP 13/86
*****************************
* *
* DOWNLOAD ROUTINE *
* WRITTEN BY R. GLENN JONES *
* FOR THE *
* DOT MATRIX FONT EDITOR *
* *
* BIG MAC ASSEMBLER *
* *
* ROUTINE IS INVOKED BY : *
* *
* CALL DW *
* *
* WHERE DW = 2048 ($800) *
* *
* *
*****************************
*
*****************************
* *
* ZERO PAGE EQUATES *
* *
*****************************
*
ESC = 27
COPY = 42
DOWNCHAR = 42
CHR0 = 48
CHR1 = 49
*
*****************************
* *
* ZERO PAGE EQUATES *
* *
*****************************
*
FPTR EQU $4 ; POINTER TO FILE
BYTPTR EQU $10 ; POINTER TO CHARACTER BYTES
CH EQU $24 ; CURSOR HORIZONTAL
CV EQU $25 ; CURSOR VERTICAL
*
*****************************
* *
* EXTERNAL REFERENCES *
* *
*****************************
*
LEN EQU $07FE
GETADDR EQU $412A ; CALCULATE ADDRESS OF CHAR DATA USING INDX
INDX EQU $41E4
LOADADDR EQU $AA72 ; ADDRESS OF LAST BLOAD
KYB EQU $C000 ; KEYBOARD
KYBSTROB EQU $C010 ; KEYBOARD STROBE
STROUT EQU $DB3A ; PRINT STRING AT (A) LOW (Y) HIGH
VTAB EQU $FC22 ; SET VTAB TO CV
HOME EQU $FC58 ; CLEAR TEXT SCREEN
*
*****************************
* *
* MACRO *
* *
*****************************
*
CHROUT MAC
STILHERE LDX $C1C1
CPX #128
BCS STILHERE
CHRGONE STA $C090
EOM
* TEST TO SEE IF LAST CHARACTER HAS LEFT
* IF $C1C1 IS GREATER THAN 128
* THEN THE CHARACTER IS STILL HERE
* ELSE PRINT CHARACTER
*
*****************************
* *
* CREATE DOWNLOAD FILE *
* *
*****************************
*
ORG $800
*
DOWN LDA #$F3 ; INITIALIZE FILE POINTER
STA FPTR
LDA #$09
STA FPTR+1
LDA #31 ; FIRST CHARACTER - 1
STA COUNT
NEXT INC COUNT ; GET A CHARACTER #
BNE NOTDONE ; COUNT < > 0
JMP DONE
NOTDONE LDA COUNT ; CONVERT CHARACTER # FOR GETADDR ROUTINE
SEC
SBC #32
STA INDX
JSR GETADDR ; CALCULATE ADDRESS OF CHARACTER DATA
LDY #0 ; TEST FLAG BYTE FOR DOWNLOAD
LDA (BYTPTR),Y
LSR
BCC NEXT
PHA
CLC ; BUMP FILE POINTER BY 13
LDA FPTR
ADC #13
STA FPTR
LDA FPTR+1
ADC #0
STA FPTR+1
LDA COUNT ; STORE CHARACTER # AT FPTR
STA (FPTR),Y
TYA ; Y = 0
STA SC ; INIT - START COLUMN
LDA #1
STA CWO ; - CHAR WIDTH OFFSET
LDA #11
STA EC ; - END COLUMN
LDA #128
STA DE ; - DESCENDER
PLA ; RETRIEVE FLAG BYTE
LSR ; TEST FOR PROPORTIONAL
BCC NOTPROP ; NOT A PROPORTIONAL CHARACTER
LSR ; GET CHARACTER WIDTH OFFSET
PHA ; SAVE FLAG BYTE
BCC GETFIRST
DEC CWO ; NO OFFSET REQUIRED
GETFIRST INY ; Y = 1
GETFCOL LDA (BYTPTR),Y ; GET A DATA BYTE
BNE FIRSTCOL ; TEST FOR FIRST NON ZERO COLUMN
INY
CPY #8 ; NO MORE THAN 8
BNE GETFCOL ; TEST NEXT COLUMN
DEY ; MAKE IT 7
FIRSTCOL TYA
SEC
SBC CWO ; SUBTRACT COLUMN WIDTH OFFSET
ASL ; MULTIPLY BY 16
ASL
ASL
ASL
STA SC
LDY #11 ; Y = 11 (LAST COLUMN)
GETLAST LDA (BYTPTR),Y ; GET A DATA BYTE
BNE LASTCOL ; TEST FOR LAST NON ZERO COLUMN
DEY
CPY #3 ; NO LESS THAN THREE
BNE GETLAST ; TEST NEXT COLUMN
INY ; MAKE IT 4
LASTCOL TYA
CMP #11 ; IF 11
BEQ NOADD ; DON'T ADD COLUMN WIDTH OFFSET
CLC
ADC CWO ; ADD COLUMN WIDTH OFFSET
NOADD STA EC
PLA ; RETRIEVE FLAG BYTE
ASL ; CREATE A DUMMY CWO
NOTPROP LSR
LSR ; TEST FOR DESCENDER
BCC CALCM0 ; NO DESCENDER
LDX #0 ; MAKE DE ZERO FOR DESCENDER
STX DE
CALCM0 CLC ; CALCULATE THE ATTRIBUTE BYTE
LDA DE ; M0 = DESCENDER + START COL + END COL
ADC SC
ADC EC
LDY #1
STA (FPTR),Y ; STORE AT FILE POINTER + 1
STORCHR LDA (BYTPTR),Y ; GET NEXT DATA BYTE
INY ; FPTR IS ALWAYS 1 AHEAD OF BYTPTR
STA (FPTR),Y ; STORE AT FILE POINTER
CPY #12 ; DONE 11 DATA BYTES ?
BNE STORCHR ; NO
JMP NEXT ; FIND ANOTHER CHARACTER
DONE LDY #13
LDA #0 ; MAKE LAST BYTE IN FILE
STA (FPTR),Y ; A ZERO FOR DOWNLOAD ROUTINE
CLC ; BUMP FPTR TO END OF FILE
LDA FPTR
ADC #14
STA FPTR
LDA FPTR+1
ADC #0
STA FPTR+1
SEC ; DETERMINE FILE LENGTH
LDA FPTR
SBC #0
STA LEN
LDA FPTR+1
SBC #10
STA LEN+1
RTS ; RETURN
COUNT HEX 00 ; COUNTER FOR LOOP
SC HEX 00 ; CHARACTER START COLUMN
EC HEX 00 ; CHARACTER END COLUMN
DE HEX 00 ; DESCENDER
CWO HEX 00 ; COLUMN WIDTH OFFSET
FILLER DS 2
*
*****************************
* *
* DOWNLOAD CHARACTER SET *
* *
*****************************
*
START LDA $AA59 ; SAVE (S) REG FOR DOS PROBLEM
PHA
JSR HOME ; CLEAR THE SCREEN
LDA #0 ; HTAB 1
STA CH
LDA #10 ; VTAB 10
STA CV
JSR VTAB
CLC ; CALCULATE ADDRESS OF MSG1
LDA LOADADDR
ADC #MSG1-START
PHA
LDA LOADADDR+1
ADC #0
TAY ; (Y) REG - HIBYTE OF MSG1
PLA ; (A) REG - LOWBYTE OF MSG1
JSR STROUT ; PRINT MSG1
READKYB LDA KYB ; GET ANY KEY
BPL READKYB
BIT KYBSTROB
NOINIT LDY #IRAM-START ; CALCULATE ADDRESS OF IRAM
LDA LOADADDR
STA FPTR
LDA LOADADDR+1
STA FPTR+1
LDA (FPTR),Y ; TEST FOR PRINTER RAM INITIALIZATION
CMP #1
BNE PRINT ; NO INIT
LDA #ESC ; COMMAND CODES TO INITIALIZE DOWNLOAD RAM
PMC CHROUT
LDA #COPY ; "*"
PMC CHROUT
LDA #CHR0 ; "0"
PMC CHROUT
PRINT CLC
LDA LOADADDR ; GET ADDRESS OF CHARACTER DATA
ADC #CHRDATA-START-13
STA BYTPTR ; USING LAST BLOAD ADDRESS
LDA LOADADDR+1
ADC #1
STA BYTPTR+1
OUT CLC ; ADD 13 TO GET ADDRESS OF
LDA BYTPTR ; NEXT CHARACTER TO DOWNLOAD
ADC #13
STA BYTPTR
LDA BYTPTR+1
ADC #0
STA BYTPTR+1
LDY #0
LDA (BYTPTR),Y ; GET THE CHARACTER NUMBER
BEQ DDONE
PHA ; SAVE ON THE STACK
LDA #ESC ; OUTPUT CHAR DOWNLOAD DEFINITION COMMAND
PMC CHROUT
LDA #DOWNCHAR ; "*"
PMC CHROUT
LDA #CHR1 ; "1"
PMC CHROUT
PLA ; RETRIVE CHARACTER NUMBER FROM STACK
PMC CHROUT ; OUTPUT TWICE
PMC CHROUT
INY
OUTPUT LDA (BYTPTR),Y ; GET A BYTE OF CHARACTER DATA
PMC CHROUT ; OUTPUT TO PRINTER
INY
CPY #13
BNE OUTPUT ; DONE THIS CHARACTER?
BEQ OUT ; THEN GET THE NEXT ONE
DDONE JSR HOME ; CLEAR TEXT SCREEN
LDA #0 ; SET HTAB
STA CH
LDA #10 ; SET VTAB
STA CV
JSR VTAB
CLC ; CALCULATE ADDRESS OF MSG2
LDA LOADADDR
ADC #MSG2-START
PHA
LDA LOADADDR+1
ADC #1
TAY ; (Y) REG - HIBYTE OF MSG2
PLA ; (A) REG - LOWBYTE OF MSG2
JSR STROUT ; PRINT MSG2
PLA
STA $AA59 ; RESTORE (S) REG
RTS
*
*****************************
* *
* CHARACTER DATA *
* STORAGE *
* *
*****************************
*
IRAM HEX 00
MSG1 ASC "PRESS ANY KEY TO DOWNLOAD FONT"
HEX 00
MSG2 ASC "FONT NOW DOWNLOADED"
HEX 00
CHRDATA HEX 00
LST OFF